202. 快乐数
题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false 。
示例 1:
1 2 3 4 5 6 7
| 输入:19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
|
示例 2:
题解
每次模10获取个位值,然后除10取整,缩小10倍,之后再取模获取中间值,依次进行直到除10的结果为0为止。在使用一个set或者map来存储计算过的不是快乐数的数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution(object): def isHappy(self, n): """ :type n: int :rtype: bool """ def func(nums): s = 0 while nums: s += (nums % 10) ** 2 nums = nums // 10 return s
record = set() while True: n = func(n) if n == 1: return True
if n in record: return False else: record.add(n)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| func isHappy(n int) bool { getNums := func (nums int) int { s := 0 for nums > 0 { s += (nums % 10) * (nums % 10) nums = nums / 10 } return s }
record := make(map[int]int) for { n = getNums(n) if n == 1{ return true }
if i, ok := record[n]; i>0 && ok{ return false }else{ record[n] = 1 } } }
|
变体
总结
参考